from langchain.tools import tool
from datetime import datetime
from dingding import models
from dingding.client import ZLDingClient

ding_client = ZLDingClient()

@tool
def get_time():
    """
    获取当前的时间
    :return: 返回当前的时间
    """
    return datetime.now().astimezone().isoformat()

@tool
async def create_calender(params: models.CalendarCreateInputModel):
    """
    build_create_calendar_url
    创建日程安排
    :param params:  创建日程的参数类型为CalendarModel
    :return:            钉钉服务器的返回值
    """
    result = await ding_client.create_calendar(params)
    return {
        "id": result['id'],
        "summary": result['summary'],
        "description": result['description'],
        "start": result["start"],
        "end": result['end'],
        "isAllDay": result["isAllDay"]
    }

@tool
async def query_calendars(params: models.CalendarQueryInputModel):
    """
    查询指定时间段内的日程安排
    :param params: 查询日程所需的参数，类型为CalendarQueryInputModel
    :return: 从钉钉服务器上搜索到的指定时间段的日程
    """
    return await ding_client.query_calendars(params)

@tool
async def delete_calendar(params: models.CalendarDeleteInputModel):
    """
    删除指定id的日程
    :param params: 删除指定id日程所需的参数，类型为CalendarDeleteInputModel
    :return: 删除的结果
    """

    return await ding_client.delete_calendar(params)

@tool
async def modify_calender(params: models.CalendarModifyInputModel):
    """
    修改日程安排
    :param 修改日程安排的参数CalendarModifyInputModel是参数的类型
    :return: 修改后的日程信息
    """
    return await ding_client.modify_calender(params)

#待办事项接口

@tool
async def create_todo(params:models.TodoCreateInputModel):
    """
    创建待办事项
    :param params:创建待办事项需要的参数 TodoCreateInputModel是参数的类型
    :return: 创建待办事项的返回信息
    """
    return await ding_client.create_todo(params)


@tool
async def query_todo(params: models.TodoQueryInputModel):
    """
    查询待办事项
    :param params: 查询待办事项的参数TodoQueryInputModel是参数的类型
    :return: 查询待办事项的返回值
    """

    return await ding_client.query_todo(params)


@tool
async def modify_todo(params: models.TodoModifyInputModel):
    """
    修改待办事项
    :param params: 修改待办事项的参数TodoModifyInputModel是参数的类型
    :return: 修改待办事项的返回值
    """

    return ding_client.modify_todo(params)


@tool
async def delete_todo(params: models.TodoDeleteInputModel):
    """
    删除待办事项
    :param params: 删除待办事项的参数TodoDeleteInputModel是参数的类型
    :return: 删除待办事项的返回值
    """

    return ding_client.delete_todo(params)

static_tools = [
    get_time,
    create_calender,
    query_calendars,
    delete_calendar,
    modify_calender,
    create_todo,
    query_todo,
    modify_todo,
    delete_todo
]